alert('外部js');//注释
prompt('这是弹窗输入框');
console.log('控制台输出');

var a1;//声明变量(variable) 弱数据类型
 a1 = 1;
 a1 = 2.2;//变量数据类型可变化
var age = prompt('请输入年龄')

/*
简单数据类型 Number String Boolean Undefined Null
复杂数据类型 object  */

var num = 10;//num 数字型
var PI = 3.14; //PI数字类型
var num1 = 0o10; //0-7 八进制前面加0o
var num2 = 0xa; //0-9 a-f 十六进制前加0x
var str = 'my name is li';
var flag = true;
var variable = undefined;
var space = null;
console.log(Number.MAX_VALUE);//最大值 1.7976931348623157e+308
console.log(Number.MIN_VALUE);//最小值 5e-324
console.log(Infinity);//正无穷
console.log(-Infinity);//负无穷
console.log(NaN);//Not a number 非数值
console.log(isNaN('xxx'));//判断是否不是数字
console.log("文字\"文字\"文字");//转义符 \n换行符 \t tab缩进  \b空格

console.log(str.length);//字符串长度
console.log(str + '!!!' + 11 + '12' + true + num);//字符串拼接
console.log(flag + 1);//true参与算数运算值为1 false参与算数运算值为0
console.log(variable + '文字');//值为undefined文字
console.log(variable + 1);//值为NaN
console.log(space + '文字');//值为null文字
console.log(space + 1);//值为1

console.log(typeof PI);//检测数据类型
console.log(typeof space);//检测数据类型为object

// 转换为字符串
console.log(num.toString());
console.log(String(num));
console.log(num + "");

//转换为数字
console.log(parseInt('77'));
console.log(parseFloat('77.77'));
console.log(Number('77'));
console.log('77' - 0);

//转换为布尔型
console.log(Boolean(''));//false
console.log(Boolean(0));//false
console.log(Boolean(NaN));//false
console.log(Boolean(null));//false
console.log(Boolean(undefined));//false
console.log(Boolean('张'));//true
console.log(Boolean(12));//true

//-------运算符
//算数：+ - * / %
//一元：
num++ ; ++num;
num-- ; --num;
//赋值：
num*= 1 ; num-= 1 ; num/= 1 ; num%= 1;
//关系：< > <= >= ==比较内容
//相等：
console.log(18 == '18');//true 数据转换
console.log(18 === '18');//false 要求内容数据类型都一样
//逻辑：&& || !

//-------优先级:
//  小括号>一元>算数>关系>相等>逻辑>赋值>逗号


//-------判断-------
if(3 > 2){
}else if(3 < 2){
}else {
}

num = 3 > 2 ? 3 : 2

switch (num){
 case 1:
  break;
 case 2:
  break;
 default:
  break;
}
//-------循环-------
for (let i = 0; i < 3; i++) {
 continue;
 break;
}

while (num < 3){
 num+=1;
}

//-------数组-------
var arr = new Array();
var arr2 = [];
console.log(arr2[0]);

//-------函数--------
function f1(a,b){
 console.log('hi');
 console.log(a+b);
 return a+b;//只能返回一个值 （a,b 返回最后一个）

 console.log(arguments)//伪数组arguments放传进来所有实参  [a,b]
 console.log(arguments.length)//伪数组arguments放传进来所有实参  [a,b]
 a = arguments[0];
 b = arguments[1];
}
//实参个数可与形参不同
f1();//缺少a,b值默认为undefined
f1(2);//缺少b值默认为undefined
f1(2,3);

//函数表达式 (匿名函数
var fun = function (){
 console.log('函数表达式');
}
fun();

//js没有块级作用域 不受{}影响

//-------预解析-------
  //把所有var function提升到作用域最前面
   //变量提升 只声明不赋值
   //函数提升 只声明不调佣
fn();  //函数写在前
function fn(){
 console.log(111111);
}

//-------对象-------
//利用对象字面量创建对象{}
var obj = {
 name:'李',
 age:18,
 sayHi:function (){
  console.log('hi');
  return null;
 }
}
  //调用
console.log(obj.name);
console.log(obj['name'])
console.log(obj.sayHi())

//利用new object创建对象
var obj2 = new Object();
obj2.name = '张';
obj2.age = 19;
var obj3 ={};

//利用构造函数创建对象
function People(name,age){
 this.name = name;
 this.age = age;
 this.sing = function (sang) {
  console.log(sang);
 //返回对象所以不用return;
 }
}
var obj4 = new People("刘",18);
obj4.sing('歌曲1');

for(var k in obj){//增强循环
 console.log(k);//遍历对象属性名
 console.log(obj.k);//遍历对象具体属性
}

//-------内置对象-------
console.log(Math.PI);

var date = new Date();
console.log(date); //Sat Jan 07 2003 20:41:14 GMT+0800(中国标准时间)
console.log('今天是'+date.getFullYear()+'年'+date.getMonth()+'月'+date.getDate()+'日');//年月日

console.log(date.valueOf());//时间戳 距1970.1.1毫秒值
console.log(date.getTime());//时间戳 距1970.1.1毫秒值
console.log(date);//时间戳 距1970.1.1毫秒值
console.log(Date.now());//时间戳 距1970.1.1毫秒值

//检测是否为数组
console.log(arr instanceof Array);
console.log(Array.isArray(arr));

var arr3 = [];
arr3.push(1);//末尾添加
arr3.pop();//末尾删除
arr3.unshift(2);//开头添加
arr3.shift();//开头删除
arr3.indexOf(1);//找给定元素的第一个索引
arr3.lastIndexOf(1);//找给定元素的最后索引
arr3.toString();//转换为字符串 并以,分隔
arr3.join('-')//转换为字符串并以 - 分隔

//-------基本包装类型-------
//简单数据类型
var str2 = 'andy';
console.log(str.length);

//-------字符串-------
//字符串不可变
str2.charAt(1);//返回指定位置字符
str2.charCodeAt(1);//返回指定位置字符ASCII编码
var str22 = str2[1];//返回指定位置字符
str2.substr(1,3);//从某个字符位置向后取字符长3
str2.slice(1,3);//从某个字符位置取字符到某个位置 3取不到
str2.substring(1,3);//从某个字符位置取字符到某个位置 3取不到 不接受负值
str2.replace('','');//替换字符串 一换一
str2.split(',')//字符串转为数组并以,分隔